package com.mt.roll.opcua.s7.my.s7connector.enmuc;

import com.mt.roll.opcua.s7.my.s7connector.api.DaveArea;
import com.mt.roll.opcua.s7.my.s7connector.api.utils.ByteUtils;
import com.mt.roll.opcua.s7.my.s7connector.type.PlcVar;

//实际 Plc中的变量。。。  要实现录入到这个枚举类中。。。 为后续做准备。
//注意：
//      ① 单体变量  length 都是1
//      ② 数组变量  length 就是 你要read 或者write数组的长度
//      ③ bitOffset 是针对Bool 来说的，其他变量bitOffset 都是0
//      ④ strSize 这个字段只是给 String变量 和 String[]变量 用的, 这个字段是plc中设置的最大String长度
//      ⑤ String类型 在write的时候禁止 write中文，因为plc中编码并没有采用UTF-8 而是采用ASCII
// （同理也是，当plc中有设置String类型或者StringArray那么告诉他们必须指定长度 通常他们也会指定长度的。）
public enum PlcVarActual {
    //心跳变量（这个可以要求电控同事加一个，不和业务关联，只用于通讯）
    HeartBeat("HeartBeat",PlcVar.BOOL,1,DaveArea.DB,3,3267,5),
    HeartBeatFor1200("HeartBeatFor1200",PlcVar.BOOL,1,DaveArea.DB,1,0,0),

    //单体变量
    DB54("DB54",PlcVar.BYTE,1,DaveArea.DB,3,3268,0),
    DTL("DTL",PlcVar.DTL,1,DaveArea.DB,3,44,0),
    STRING1("STRING",PlcVar.STRING,1,DaveArea.DB,3,62,0,20),
    SUBID0("SUBID0",PlcVar.STRING,1,DaveArea.DB,3,3270,0),

    //数组变量
    CharArrays("CharArrays",PlcVar.CHAR_Array,2,DaveArea.DB,3,834,0),
    BooleanArrays("BooleanArrays",PlcVar.BOOL_Array,2,DaveArea.DB,3,830,0),
    SubIdArrays("SubIdArrays",PlcVar.STRING_Array,60,DaveArea.DB,3,3270,0,18)

//(String name, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset, PlcVar type, Integer length, Integer strSize, Integer locationNum, String desc)


    ;


    private String name;
    private DaveArea area;
    private Integer areaNumber;
    private Integer byteOffset;
    private Integer bitOffset;
    private PlcVar type;
    //length = 1代表 非数组;;;       length > 1 代表数组  ;; 注意 length这个参数 是实际plc中 数组的长度，和read操作相关
    //如果是String 类型不用填length 只需要填string类型的起始位置就行了，我会自己去取数据长度（也就是说这里的length并不是string 的长度）。
    private Integer length;

    //这个字段只是给 字符串变量 和 字符串数组 用, 这个字段是plc中设置的最大String长度
    private Integer strSize;

    PlcVarActual(String name, PlcVar type,Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset){
        this.name = name;
        this.type = type;
        this.length = length;
        this.area = area;
        this.areaNumber = areaNumber;
        this.byteOffset = byteOffset;
        this.bitOffset = bitOffset;
    }
    PlcVarActual(String name, PlcVar type,Integer length, DaveArea area, Integer areaNumber, Integer byteOffset, Integer bitOffset,Integer strSize){
        this.name = name;
        this.type = type;
        this.length = length;
        this.area = area;
        this.areaNumber = areaNumber;
        this.byteOffset = byteOffset;
        this.bitOffset = bitOffset;
        this.strSize = strSize;
    }

    public Integer getStrSize() {
        return strSize;
    }

    public void setStrSize(Integer strSize) {
        this.strSize = strSize;
    }

    public String getName() {
        return name;
    }

    public DaveArea getArea() {
        return area;
    }

    public Integer getAreaNumber() {
        return areaNumber;
    }

    public Integer getBitOffset() {
        return bitOffset;
    }

    public Integer getByteOffset() {
        return byteOffset;
    }

    public PlcVar getType() {
        return type;
    }

    public Integer getLength() {
        return length;
    }
}
